import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import { copyFileSync, existsSync, mkdirSync, readdirSync } from 'fs'
import { join, resolve } from 'path'

// 复制docs文件夹到dist目录的插件
function copyDocsPlugin() {
  return {
    name: 'copy-docs',
    closeBundle() {
      const srcDir = resolve(__dirname, 'public/docs')
      const destDir = resolve(__dirname, 'dist/docs')
      
      // 确保目标目录存在
      if (!existsSync(destDir)) {
        mkdirSync(destDir, { recursive: true })
      }
      
      // 递归复制函数
      function copyDirectory(src, dest) {
        // 读取源目录下的所有文件和子目录
        const entries = readdirSync(src, { withFileTypes: true })
        
        entries.forEach(entry => {
          const srcPath = join(src, entry.name)
          const destPath = join(dest, entry.name)
          
          if (entry.isDirectory()) {
            // 如果是目录，创建目标目录并递归复制
            if (!existsSync(destPath)) {
              mkdirSync(destPath, { recursive: true })
            }
            copyDirectory(srcPath, destPath)
          } else {
            // 如果是文件，直接复制
            copyFileSync(srcPath, destPath)
            console.log(`Copied: ${entry.name} to ${destPath}`)
          }
        })
      }
      
      // 开始递归复制
      copyDirectory(srcDir, destDir)
    }
  }
}

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueDevTools(),
    copyDocsPlugin()
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      'xlsx': 'xlsx/dist/xlsx.full.min.js'
    },
  },
  // 明确指定需要包含的静态资源类型
  assetsInclude: [
    '**/*.docx',
    '**/*.pdf'
  ],
  
  // 构建选项
  build: {
    rollupOptions: {
      // 确保所有静态资源都被正确处理
      output: {
        // 保留原始文件名
        assetFileNames: 'assets/[name]-[hash][extname]'
      }
    }
  }
})
